﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using mvLibrary.Helpers.Enums;

namespace mvLibrary.Helpers.Managers
{
    public static class ErrorsManager
    {
        private static IDictionary<ErrorType, MessageBoxIcon> tiposDeError = new Dictionary<ErrorType, MessageBoxIcon>() { { ErrorType.Mensaje, MessageBoxIcon.Information }, { ErrorType.Warning, MessageBoxIcon.Warning }, { ErrorType.Error, MessageBoxIcon.Error } };
        private static string SHARP = "#";

        /*
         * Desde pick siempre que se ejecute una subrutina, va a ver dos valores que pueden venir o no con infirmacion
         * subErr => Va a venir con el numer 1(UNO) si es que hubo algun error al ejecutar una subrutina en pick, sin o viene vacio.
         * message => Para poder diferenciar que es un mensaje controlado por Willy o por Santiago, 
         * lo que se hizo fue crear la siguiente convencion:
         * Si los primeros 2 caracteres son: 1#, 2# o 3# significan ->  "mensaje comun", "warning" o "error", respectivamente.
         * En cualquiera de los casos se muestra por pantalla el mensaje.
         * Si no son uno de esos 3 caracteres entonces el sistema no mostrar informacion.
         * 
         */
        public static ErrorType ShowAndGetMessageType(string subErr, string message)
        {
            ErrorType error = ErrorType.Nada;
            
            int errorValue = GetErrorValueFromMessage(message);
            bool hasSharpSimbol = HasSharpSimbol(message);

            if (errorValue != 0 && hasSharpSimbol)
            {
                error = !string.IsNullOrEmpty(message) ? (ErrorType)errorValue : ErrorType.Nada;

                MessageBox.Show("Mensaje del servidor:\n\n" + message.Substring(2), string.Empty, MessageBoxButtons.OK,
                                tiposDeError[error]);
            }

            return error;
        }

        private static bool HasSharpSimbol(string message)
        {
            return message.Substring(2, 1).Equals(SHARP);
        }

        private static int GetErrorValueFromMessage(string message)
        {
            int errorValue = 0;

            if (!string.IsNullOrEmpty(message))
                int.TryParse(message.Substring(0, 1), out errorValue);

            return errorValue;
        }
    }



    public enum ErrorType
    {
        [EnumUtils.DisplayValue("Nada")]
        Nada = 0,
        [EnumUtils.DisplayValue("Mensaje")]
        Mensaje = 1,
        [EnumUtils.DisplayValue("Warning")]
        Warning = 2,
        [EnumUtils.DisplayValue("Error")]
        Error = 3
    }
}
